// 代理沙箱

let defaultValue = {} // 子应用的沙箱容器

export class ProxySandbox {
    constructor() {
        this.proxy = null;
        this.active()
    }

    // 沙箱激活
    active() {
      this.proxy = new Proxy(window, {
        get(target,key) {
          // 为什么要做这个判断？ 会报错误：Illegal invocation
          // （this 指向了proxy）将this指向原来的对象（被代理的对象）
          if (typeof target[key] === 'function') {
            return target[key].bind(target)
          }
          // 初始defaultValue为空，没有location对象
          // performScriptForFunction中return window['${appName}']会报location找不到
          // 所以初始用target[key]
          return defaultValue[key] || target[key]
        },
        set(target,key, value) {
          defaultValue[key] = value;
          return true;
        },
      });
    }

    // 沙箱销毁
    inactive() {
      defaultValue = {}
    }
 }


// export class ProxySandbox{
//   constructor() {
//     this.proxy = null;

//     this.active()
//   }
//   // 沙箱激活
//   active() {
//     // 子应用需要设置属性，
//     this.proxy = new Proxy(window, {
//       get(target, key) {
//         if (typeof target[key] === 'function') {
//           return target[key].bind(target)
//         }
//         return defaultValue[key] || target[key]
//       },
//       set(target, key, value) {
//         defaultValue[key] = value
//         return true
//       }
//     })

//   }

//   // 沙箱销毁
//   inactive () {
//     defaultValue = {}
//   }
// }
